package cn.itstudio.view.action;

import java.util.List;
import java.util.Map;

import org.activiti.engine.task.Task;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import cn.itstudio.base.BaseAction;
import cn.itstudio.domain.Forum;
import cn.itstudio.domain.Topic;
import cn.itstudio.domain.User;
import cn.itstudio.util.QueryHelper;
import cn.itstudio.util.SessionContext;

import com.opensymphony.xwork2.ActionContext;

@SuppressWarnings("serial")
@Controller
@Scope("prototype")
public class HomeAction extends BaseAction<User> {
	int countPer = 0;
	/**
	 * 0 表示查看全部主题<br>
	 * 1 表示只看精华帖
	 */
	private int viewType = 0;

	/**
	 * 0 表示默认排序(所有置顶帖在前面，并按最后更新时间降序排列)<br>
	 * 1 表示只按最后更新时间排序<br>
	 * 2 表示只按主题发表时间排序<br>
	 * 3 表示只按回复数量排序
	 */
	private int orderBy = 0;

	/**
	 * true 表示升序<br>
	 * false 表示降序
	 */
	private boolean asc = false;

	/** 版块列表 */
	public String index() throws Exception {
		//1：从Session中获取当前用户名
		String name = SessionContext.get().getName();
		//2：使用当前用户名查询正在执行的任务表，获取当前任务的集合List<Task>
		List<Task> taskList = workflowService.findTaskListByName(name);
		Long waitTaskCount = null;
		if(taskList != null){
		 waitTaskCount =(long) taskList.size(); 
		}
		Map<String , Object> application = ActionContext.getContext().getApplication();
		if(waitTaskCount!=null){
			application.put("waitTaskCount", waitTaskCount);	
		}else{
			String noView ="true";
			application.put("noView", noView);
		}
		
		int online = UserAction.online;
		ActionContext.getContext().put("online", online);
		// 准备数据：forum,其中forum是最热论坛
			Forum forum = forumService.getByHot();
			ActionContext.getContext().put("forum", forum);
		//准备最新话题数据
		// 准备分页信息 ，最终版，orderBy = 3表示为帖子回复最多
			orderBy = 3;
			new QueryHelper(Topic.class, "t")//
	    	// 过滤条件		    
	    	.addCondition("t.forum=?", forum)//
	    	.addCondition((viewType == 1), "t.type=?", Topic.TYPE_BEST) // 1 表示只看精华帖
	    	// 排序条件
	    	.addOrderProperty((orderBy == 1), "t.lastUpdateTime", asc) // 1 表示只按最后更新时间排序
	    	.addOrderProperty((orderBy == 2), "t.postTime", asc) // 2 表示只按主题发表时间排序
	    	.addOrderProperty((orderBy == 3), "t.replyCount", asc) // 3 表示只按回复数量排序
	    	.addOrderProperty((orderBy == 0), "(CASE t.type WHEN 2 THEN 2 ELSE 0 END)", false)//
	    	.addOrderProperty((orderBy == 0), "t.lastUpdateTime", false) // 0 表示默认排序(所有置顶帖在前面，并按最后更新时间降序排列)
	    	.prepareHomeHotPageBean(topicService, pageNum, pageSize);
			//准备最新话题数据
			// 准备分页信息 ，最终版，orderBy = 1  表示帖子最新更新时间
			orderBy = 1;
			new QueryHelper(Topic.class, "t")//
				// 过滤条件		    
				.addCondition("t.forum=?", forum)//
				.addCondition((viewType == 1), "t.type=?", Topic.TYPE_BEST) // 1 表示只看精华帖
				// 排序条件
				.addOrderProperty((orderBy == 1), "t.lastUpdateTime", asc) // 1 表示只按最后更新时间排序
				.addOrderProperty((orderBy == 2), "t.postTime", asc) // 2 表示只按主题发表时间排序
				.addOrderProperty((orderBy == 3), "t.replyCount", asc) // 3 表示只按回复数量排序
				.addOrderProperty((orderBy == 0), "(CASE t.type WHEN 2 THEN 2 ELSE 0 END)", false)//
				.addOrderProperty((orderBy == 0), "t.lastUpdateTime", false) // 0 表示默认排序(所有置顶帖在前面，并按最后更新时间降序排列)
				.prepareHomeNewPageBean(topicService, pageNum, pageSize);

		return "index";
	}

	public String top() throws Exception {
		return "top";
	}

	public String bottom() throws Exception {
		return "bottom";
	}

	public String left() throws Exception {
		return "left";
	}

	public String right() throws Exception {
		return "right";
	}
}
